//@ts-nocheck
import {addEvent} from './event';

export function onlyOne(obj){
  //TODO 报警告
  return Array.isArray(obj) ? obj[0] : obj;
}

export function setProps(dom, props){
  for (const key in props) {
    if(key != 'children'){
      const value = props[key];
      setProp(dom, key, value)
    }
  }
}

/*
1.老有新没有 删除
2.新老都有 更新
3.老没有新游 添加
* */
export function patchProps(dom, oldProps, newProps) {
  //1.老有新没有 删除
  for (const key in oldProps){
    if(key !== 'children') { // 此处只处理自己的DOM属性, 不处理children节点
      if(!newProps.hasOwnProperty(key)){
        dom.removeAttribute(key);
      }
    }
  }

  //2.新老都有 更新
  //3.老没有新游 添加
  for (const key in newProps){
    if(key !== 'children') { // 此处只处理自己的DOM属性, 不处理children节点
      setProp(dom, key, newProps[key]);
    }
  }
}

function setProp(dom, key, value){
  if(/^on/.test(key)){
    // dom[key.toLowerCase()] = value; // react使用的是合成事件
    addEvent(dom, key, value);
  }else if (key === 'style'){
    for (const styleName in value){
      dom.style[styleName] = value[styleName];
    }
  }else {
    dom.setAttribute(key, value);
  }
}

// 打平一个任意多维数组
export function flatten(array) {
  const flatted = [];
  (function flat(array) {
    array.forEach(item => {
      if (Array.isArray(item)) {
        flat(item);
      } else {
        flatted.push(item);
      }
    });
  })(array);
  return flatted;
}

export function isFunction(obj){
  return typeof obj === 'function';
}
